export interface ModelCapability {
  name: string
  desc: string
}

// params 定义 支持 number string boolean array object step

export interface CommonParamsRule {
  name: string
  desc: string
  type: 'string' | 'number' | 'boolean' | 'array' | 'object'
}

export interface NumberParamsRule extends CommonParamsRule {
  default: number
  type: 'number'
  min: number
  max: number
  step: number
}

export interface StringParamsRule extends CommonParamsRule {
  default: string
  type: 'string'
}

export interface BooleanParamsRule extends CommonParamsRule {
  default: boolean
  type: 'boolean'
}

export interface ArrayOptions {
  key: string
  val: string
}
export interface ArrayParamsRule extends CommonParamsRule {
  default: string[]
  type: 'array'
  options: ArrayOptions[]
}

export interface LLMModel {
  id: string // 模型唯一标识符
  name: string // 模型调用名称
  title: string // 模型显示标题
  alias: string | null // 自定义别名
  desc: string | null // 模型描述
  logo: string | null // 模型logo图片URL
  vendor: string | null // 发行商/提供商
  releaseDate: string // 发行日期
  version: string | null // 模型版本

  maxInputTokens: number // 最大输入token数
  maxOutputTokens: number // 最大输出token数

  capabilities: string[] // 模型能力列表 例如视觉 [vision, chat, text-embedding, speech2text]

  level: number // 对应的vip级别 0 免费 1 专业 2 企业

  // 模型参数
  params: {
    temperature: NumberParamsRule // 温度
    max_tokens: NumberParamsRule // 最大输出token数
    frequency_penalty: NumberParamsRule // 频率惩罚
    presence_penalty: NumberParamsRule // 存在惩罚
    repetition_penalty: NumberParamsRule // 重复惩罚
    top_p: NumberParamsRule // 
    top_k: NumberParamsRule // 
  }

  pricing: {
    // 价格信息
    inputPrice: number // 输入价格(每1000 tokens)
    outputPrice: number // 输出价格(每1000 tokens)
    currency: string // 货币单位
  }

  apiEndpoint: string // API调用端点
  documentationUrl: string | null // 文档URL

  // 可选:性能指标
  performance?: {
    speedScore: number | null // 速度评分
    qualityScore: number | null // 质量评分
  }

  // 可选:使用限制
  usageLimits?: {
    requestsPerMinute: number | null // 每分钟请求数
    tokensPerMinute: number | null // 每分钟token数
  }
}
